var app = getApp()
function inArray(arr, key, val) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i][key] === val) {
      return i;
    }
  }
  return -1;
}

// ArrayBuffer转16进度字符串示例
function ab2hex(buffer) {
  var hexArr = Array.prototype.map.call(
    new Uint8Array(buffer),
    function (bit) {
      return ('00' + bit.toString(16)).slice(-2)
    }
  )
  return hexArr.join('');
}
function array2String(buffer) {
  let hexArr = Array.prototype.map.call(
    new Uint8Array(buffer),
    function (bit) {
      return ('00' + bit.toString(16)).slice(-2)
    }
  )
  return `${hexArr[7]}:${hexArr[6]}:${hexArr[5]}:${hexArr[2]}:${hexArr[1]}:${hexArr[0]}`
} 

function arrayBufferToHexString(buffer) {
  let bufferType = Object.prototype.toString.call(buffer)
  if (buffer != '[object ArrayBuffer]') {
    return
  }
  let dataView = new DataView(buffer)

  var hexStr = '';
  for (var i = 0; i < dataView.byteLength; i++) {
    var str = dataView.getUint8(i);
    var hex = (str & 0xff).toString(16);
    hex = (hex.length === 1) ? '0' + hex : hex;
    hexStr += hex;
  }
  return hexStr.toUpperCase();
}

Page({

    /**
     * 页面的初始数据
     */
    data: {
      info: "未初始化蓝牙适配器",
      connectedDeviceId: "",
      deviceId: "",
      services: "",
      servicesUUID: "0000ff00-0000-1000-8000-00805f9b34fb",
      serviceId: "",
      notifyCharacteristicsId: "",
      writeCharacteristicsId: "",
  },
  lanyatest1(event) {
    var that = this;
    wx.openBluetoothAdapter({
      success: function (res) {
        console.log('初始化蓝牙适配器成功')
        //页面日志显示
        that.setData({
          info: '初始化蓝牙适配器成功'
        })
      },
      fail: function (res) {
        console.log('请打开蓝牙和定位功能')
        that.setData({
          info: '请打开蓝牙和定位功能'
        })
      }
    })
  },



  lanyatest2(event) {
    var that = this;
    wx.getBluetoothAdapterState({

      success: function (res) {

        //打印相关信息
        console.log(JSON.stringify(res.errMsg) + "\n蓝牙是否可用：" + res.available);

        that.setData({
          info: JSON.stringify(res.errMsg) + "\n蓝牙是否可用：" + res.available
        })

      },
      fail: function (res) {

        //打印相关信息
        console.log(JSON.stringify(res.errMsg) + "\n蓝牙是否可用：" + res.available);

        that.setData({
          info: JSON.stringify(res.errMsg) + "\n蓝牙是否可用：" + res.available
        })

      }

    })

  },



  lanyatest3(event) {
    var that = this;
    wx.startBluetoothDevicesDiscovery({
     // services: ['FEE7'], //如果填写了此UUID，那么只会搜索出含有这个UUID的设备，建议一开始先不填写或者注释掉这一句
      success: function (res) {
        that.setData({
          info: "搜索设备" + JSON.stringify(res),
        })
        console.log('搜索设备返回' + JSON.stringify(res))

      }
    })

  },

  lanyatest4(event) {
    var that = this;
    wx.getBluetoothDevices({
      success: function (res) {
        var arrayMac = ''
  
        that.setData({
          info: "设备列表\n" + JSON.stringify(res.devices),
          devices: res.devices
        })
        console.log('搜设备数目：' + res.devices.length)
        console.log('设备信息=================================：\n' + JSON.stringify(res.devices) + "\n")
        for (var i = 0; i < res.devices.length; i++) {
        var arrayBuffer = res.devices[i].advertisData
        var json = JSON.stringify(arrayBuffer);
        console.log('json='+json);
        //var copy = new ArrayBuffer(JSON.parse(json))
        //let s = decodeURIComponent(arrayBuffer.map(function (value, index) { return '%' + value.toString(16) }));
        //console.log(copy)
        }
     //   that.lanyatest4();
      }
    })

  },



  lanyatest44(event) {
    var that = this;
    wx.getBluetoothDevices({
      success: function (res) {
        var arrayMac =''
        console.log('leg' + res.devices.length)
        for (var i = 0; i < res.devices.length; i++) {
          if (res.devices[i].name=='XT_PICO'){
            var buff = res.devices[i].advertisData;
            var arrayMac = arrayBufferToHexString(buff);//二进制转字符串
        //    var arrayBuff = Array.prototype.map.call(new Uint8Array(buff), x => ('00' + x.toString(16))).join(':');
          //  arrayMac = arrayMac + arrayBuff.toUpperCase() + ',';
            console.log('arrayMac' + arrayMac)
          }
        }
      //  }
        that.setData({
          'arrayMac': arrayMac
        })
        that.setData({
          info: "设备列表\n" + JSON.stringify(res.devices),
          devices: res.devices
        })
        console.log('搜设备数目：' + res.devices.length)
        console.log('设备信息：\n' + JSON.stringify(res.devices) + "\n")
      }
    })

  },
  lanyatest444(event) {
    var that = this;
    wx.onBluetoothDeviceFound((res) => {
      res.devices.forEach(device => {
       // const idx = inArray(foundDevices, 'deviceId', device.deviceId)

        const data = {}
        device.macAddr = ab2hex(device.advertisData)
        console.log('devicename:' + device.name)
        console.log('devicelocalname:' + device.localName)
        console.log('arrayMac:' + device.macAddr)
        if (device.name == 'XT_PICO') {
        that.setData({
           'arrayMac': device.macAddr
         })
        }
      })
    })
  },



  lanyaconnect(event) {
    var that = this;
    wx.createBLEConnection({
      deviceId: event.currentTarget.id,
      success: function (res) {
      


        console.log('调试信息：' + res.errMsg);
        that.setData({
          connectedDeviceId: event.currentTarget.id,
          info: "MAC地址：" + event.currentTarget.id+ '  调试信息：' + res.errMsg,
        })
      },
      fail: function () {
        that.setData({

          info: "连接失败",
        })
        console.log("连接失败");
      },

    })

  },


  lanyatest6(event) {
    var that = this;
    wx.stopBluetoothDevicesDiscovery({
      success: function (res) {
        console.log("停止搜索" + JSON.stringify(res.errMsg));
        that.setData({
          info: "停止搜索" + JSON.stringify(res.errMsg),
        })
      }
    })

  },



  lanyatest7(event) {
    var that = this;
    wx.getBLEDeviceServices({
      // 这里的 deviceId 需要在上面的 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取
      deviceId: that.data.connectedDeviceId,
      success: function (res) {
        console.log('services UUID:\n', JSON.stringify(res.services));
        for (var i = 0; i < res.services.length; i++) {
          console.log("第" + (i + 1) + "个UUID:" + res.services[i].uuid + "\n")


        }
        that.setData({
          services: res.services,
          info: JSON.stringify(res.services),
        })
      }
    })

  },



  lanyatest8(event) {
    var that = this;
    var myUUID = that.data.servicesUUID;//具有写、通知属性的服务uuid
    console.log('UUID' + myUUID)
    wx.getBLEDeviceCharacteristics({
      // 这里的 deviceId 需要在上面的接口中获取
      deviceId: that.data.connectedDeviceId,
      // 这里的 serviceId 需要在上面的 接口中获取
      serviceId: myUUID,
      success: function (res) {
        console.log("%c getBLEDeviceCharacteristics", "color:red;");
        for (var i = 0; i < res.characteristics.length; i++) {
          console.log('特征值：' + res.characteristics[i].uuid)

          if (res.characteristics[i].properties.notify) {
            console.log("notifyServicweId：", myUUID);
            console.log("notifyCharacteristicsId：", res.characteristics[i].uuid);
            that.setData({
              notifyServicweId: myUUID,
              notifyCharacteristicsId: "0000ff01-0000-1000-8000-00805f9b34fb",//手动设置notifyCharacteristicsId为这个UUID，为了方便写死在这里

            })
          }
          if (res.characteristics[i].properties.write) {
            console.log("writeServicweId：", myUUID);
            console.log("writeCharacteristicsId：", res.characteristics[i].uuid);
            that.setData({
              writeServicweId: myUUID,
              //writeCharacteristicsId: res.characteristics[i].uuid,
              writeCharacteristicsId: "0000ff02-0000-1000-8000-00805f9b34fb",//手动设置writeCharacteristicsId为这个UUID，为了方便写死在这里
            })

          }

        }
        console.log('device getBLEDeviceCharacteristics:', res.characteristics);

        that.setData({
          msg: JSON.stringify(res.characteristics),
        })
      },
      fail: function () {
        console.log("fail");
      },

    })

  },



  lanyatest9(event) {
    var that = this;
    var notifyServicweId = that.data.servicesUUID;  //具有写、通知属性的服务uuid
    var notifyCharacteristicsId = that.data.notifyCharacteristicsId;
    console.log("启用notify的serviceId", notifyServicweId);
    console.log("启用notify的notifyCharacteristicsId", notifyCharacteristicsId);

    wx.notifyBLECharacteristicValueChange({
      state: true, // 启用 notify 功能
      deviceId: that.data.connectedDeviceId,
      // 这里的 serviceId 就是that.data.servicesUUID
      serviceId: notifyServicweId,

      characteristicId: that.data.notifyCharacteristicsId,
      success: function (res) {
        console.log('notifyBLECharacteristicValueChange success', res.errMsg)
        var msg = '启动notify:' + res.errMsg
        that.setData({
          info: msg
        })
      },
      fail: function () {
        console.log('启动notify:' + res.errMsg);

      },
    })


  },



  lanyatest10(event) {
    var that = this;
    console.log("开始接收数据");


    wx.onBLECharacteristicValueChange(function (res) {
      
      console.log("characteristicId：" + res.characteristicId)
      console.log("serviceId:" + res.serviceId)
      console.log("deviceId" + res.deviceId)
      console.log("Length:" + res.value.byteLength)
      console.log("hexvalue:" + ab2hex(res.value))
      that.setData({
        info: that.data.info + ab2hex(res.value)
      })

    })

  },

})